package com.eliza.v.http.base

import com.eliza.v.http.VertxTools
import io.vertx.core.AbstractVerticle
import io.vertx.core.Promise
import io.vertx.core.http.HttpMethod
import io.vertx.ext.web.Router
import io.vertx.ext.web.RoutingContext


/*-*- coding:utf-8 -*-
 * @Author  : debi
 * @Time    : 2/1/22
 * @Software: IntelliJ IDEA
 */
class MimeRouterInfo : AbstractVerticle() {
    override fun start(startPromise: Promise<Void>?) {
        super.start(startPromise)
        accept()
    }

    /**
     * 基于请求的 MIME 类型的路由
     */
    fun head() {
        Router.router(vertx).route()
            .consumes("text/html") //content-type
            .consumes("text/plain") //content-type
            .consumes("text/*") //支持子类型的通配符匹配
            .consumes("*/json")//匹配顶级类型
            .handler { rc ->

            }
    }

    /**
     * 基于客户端可接受的 MIME 类型的路由基于请求的 MIME 类型的路由
     */
    private fun accept() {
/*    HTTP accept标头用于表示客户端可以接受哪些 MIME 类型的响应。
    一个accept标头可以有多个 MIME 类型，由“，”分隔    */

        val router = Router.router(vertx)
        router.route().method(HttpMethod.POST).method(HttpMethod.GET).path("/accept1")
            .handler { rc: RoutingContext ->
                println("httpRoute1: " + rc.request().getParam("name"))
                rc.response().end("httpRoute1")
            }
        router.post("/accept2")
            .consumes("text/*")
            .consumes("*/json")
            .produces("application/json")
            .produces("text/html")
            .handler { rc ->
                println(rc.request().body())
                val response = rc.response()
                response.putHeader("content-type", rc.acceptableContentType)
                response.end(
                    "{\n" +
                            "   \"name\":\"As\"\n" +
                            "}"
                )
            }
        VertxTools.result(vertx, this, "accept", router, 8080)

    }


}